<?php

namespace GestionLivre\LivreBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use GestionLivre\LivreBundle\Entity\Livre;

class LivreController extends Controller
{
    
    /*
     * Affichage de la liste des livres
     */
    public function listerLivreAction()
    {
        $livres = $this
            ->getDoctrine()
            ->getRepository('GestionLivreLivreBundle:Livre')
            ->findBy(array(), array(
                'auteur' => 'ASC'
            ));
        
        
        return $this->render('GestionLivreLivreBundle:Livre:listerLivre.html.twig', array(
            'livres' => $livres
            ));
    }
    
    /*
     * Suppression d'un livre
     */
    public function supprimerLivreAction($id)
    {
        $livre = $this
            ->getDoctrine()
            ->getRepository('GestionLivreLivreBundle:Livre')
            ->findOneBy(array('id' => $id));
        
        // Si le livre n'existe pas on redirige vers la liste de livres
        if (!$livre) {
            return $this->redirect($this->generateUrl('GestionLivreLivreBundle_listerLivre'));           
        } 
        // Sinon on peut le supprimer
        else 
        {
            $em = $this->getDoctrine()->getEntityManager();
            $em->remove($livre);
            $em->flush();
            
            return $this->redirect($this->generateUrl('GestionLivreLivreBundle_listerLivre'));
        }
    }
    
    /*
     * Ajout d'un livre
     */
    public function ajouterLivreIsbnAction()
    {      
        $livre = new Livre();
       
        $form = $this->createFormBuilder($livre)     
            ->add('isbn','text', array
                    ('label' => 'ISBN'))
            ->add('contact', 'entity', array(
                'label' => 'Contact',
                'class' => $this->container->getParameter('entity_contact'),
                'empty_value' => 'Sélectionner un contact',
                'property' => 'nomComplet',
                'required' => FALSE               
                ))
            ->getForm(); 
        
        if($this->getRequest()->getMethod() == 'POST')
        {
            $form->bindRequest($this->getRequest());
            if($form->isValid())
            {
                // On récupère notre objet
                $livre = $form->getData();
                $requete = 'https://www.googleapis.com/books/v1/volumes?q=isbn:' . $livre->getIsbn();
                $temp = file_get_contents($requete);
                $reponse = json_decode($temp);

                if($reponse->totalItems > 0)
                {
                    $livreGoogle = $reponse->items[0]->volumeInfo;
                    $livre->setTitre($livreGoogle->title);
                    $livre->setAuteur($livreGoogle->authors[0]);
                    $livre->setDescription($livreGoogle->description);                 
                }
                else
                {
                    return $this->redirect($this->generateUrl('GestionLivreLivreBundle_ajouterLivreComplet'));
                }
                
                //On l'enregistre dans la base de données
                $em = $this->getDoctrine()->getEntityManager();
                try{
                    $em->persist($livre);
                    $em->flush();
                    
                    //On redirige
                    return $this->redirect($this->generateUrl('GestionLivreLivreBundle_listerLivre'));
                }
                catch (\PDOException $e)
                {
                    $e = 'Il y a une erreur.';
                }
            }
        }
        
        return $this->render('GestionLivreLivreBundle:Livre:ajouterOuModifier.html.twig', array(
            'edition' => 'Ajouter',
            'form' => $form->createView()
        ));
    }
    
    /*
     * Ajout d'un livre
     */
    public function ajouterLivreCompletAction()
    {      
        $livre = new Livre();
        
        $form = $this->createFormBuilder($livre)     
            ->add('titre','text', array 
                    ('label' => 'Titre'))
            ->add('auteur','text', array
                    ('label' => 'Auteur'))
            ->add('isbn','text', array
                    ('label' => 'ISBN'))
            ->add('contact', 'entity', array(
                'label' => 'Contact',
                'class' => $this->container->getParameter('entity_contact'),
                'empty_value' => 'Sélectionner un contact',
                'property' => 'nomComplet',
                'required' => FALSE               
                ))
            ->getForm(); 
        
        if($this->getRequest()->getMethod() == 'POST')
        {
            $form->bindRequest($this->getRequest());
            if($form->isValid())
            {
                // On récupère notre objet
                $livre = $form->getData();    
                
                //On l'enregistre dans la base de données
                $em = $this->getDoctrine()->getEntityManager();
                try{
                    $em->persist($livre);
                    $em->flush();
                    
                    //On redirige
                    return $this->redirect($this->generateUrl('GestionLivreLivreBundle_listerLivre'));
                }
                catch (\PDOException $e)
                {
                    $e = 'Il y a une erreur.';
                }
            }
        }
        
        return $this->render('GestionLivreLivreBundle:Livre:ajouterOuModifier.html.twig', array(
            'edition' => 'Ajouter',
            'form' => $form->createView()
        ));
    }
    
    /*
     * Modification d'un livre
     */
    public function modifierLivreAction($id = NULL)
    {      
        if(isset($id))
        {
            $livre = $this
                ->getDoctrine()
                ->getRepository('GestionLivreLivreBundle:Livre')
                ->findOneBy(array('id' => $id));
        }
            
        $form = $this->createFormBuilder($livre)     
            ->add('titre','text', array 
                    ('label' => 'Titre'))
            ->add('auteur','text', array
                    ('label' => 'Auteur'))
            ->add('isbn','text', array
                    ('label' => 'ISBN')) 
            ->add('contact', 'entity', array(
                'label' => 'Contact',
                'class' => $this->container->getParameter('entity_contact'),
                'empty_value' => 'Sélectionner un contact',
                'property' => 'nomComplet',
                'required' => FALSE               
                ))
            ->getForm(); 
        
        if($this->getRequest()->getMethod() == 'POST')
        {
            $form->bindRequest($this->getRequest());
            if($form->isValid())
            {
                // On récupère notre objet
                $contact = $form->getData();
                
                //On l'enregistre dans la base de données
                $em = $this->getDoctrine()->getEntityManager();
                try{
                    $em->persist($livre);
                    $em->flush();
                    
                    //On redirige
                    return $this->redirect($this->generateUrl('GestionLivreLivreBundle_listerLivre'));
                }
                catch (\PDOException $e)
                {
                    $e = 'Il y a une erreur.';
                }
            }
        }
        
        return $this->render('GestionLivreLivreBundle:Livre:ajouterOuModifier.html.twig', array(
            'edition' => 'Modifier',
            'form' => $form->createView()
        ));
    }    
}
